import { Request } from "express";

export interface IMaxProject {
  id: number;
  projectMaxId: string;
  projectName: string;
}

export interface IProject {
  id: number;
  projectId: string;
  projectName: string;
  projectDeclareId: number;
  projectDeclareName: string;
  projectGroupId: number;
  projectGroupName: string;
  projectOwnerId: number;
  projectOwnerEmployeeId: string;
  projectOwnerName: string;
  projectOwnerPhone: string;
  projectOwnerEmail: string;
  projectDepartment: string;
  projectSource: string;
  projectCategory: string;
  projectLevel: string;
  projectDirection: string;
  projectResearchDirection: string;
  projectStatus: string;
  projectDeclareDate: string;
  projectCreatedDate: string;
  projectStartDate: string;
  projectExpectedEndDate: string;
  projectEndDate: string;
  projectApprovedCost: number;
  projectAppliedCost: number;
  projectAppliedCostSource: string;
  projectAppliedCostItems: any[];
  projectResultForm: string;
  projectStatisticalYear: string;
  projectAttachFileName: string;
  projectAttachFileUrl: string;
  projectChangeReport: string;
  projectChangeReportName: string;
  projectChangeDescription: string;
  projectEthicalApproverId1: number;
  projectEthicalApproverName1: string;
  projectEthicalApproverId2: number;
  projectEthicalApproverName2: string;
  projectCostApproverId: number;
  projectCostApproverName: string;
  projectPreApproverId: number;
  projectPreApproverName: string;
  projectEndApproverId: number;
  projectEndApproverName: string;
  projectMidReportName: string;
  projectMidReport: string;
  projectMidDate: string;
  projectMidDescription: string;
  projectFinalReportName: string;
  projectFinalReport: string;
  projectFinalDate: string;
  projectFinalDescription: string;
  projectMidApproverId: number;
  projectMidApproverName: string;
  projectFinalApproverId: number;
  projectFinalApproverName: string;
  projectCheckStatus: string;
  projectCheckHistory: any[];
  projectChangeHistory: any[];
  projectApplicantId: number;
  projectApplicantName: string;
  projectInformationCheckStatus: string;
  projectInformationCheckHistory: any[];
  projectChangeStatus: string;
  projectEthicCheckCount: number;
  projectSubjectReport: string;
  projectSubjectReportName: string,
  projectSubjectDate: string,
  projectSubjectDescription: string,
  projectSubjectApproverId: number,
  projectSubjectApproverName: string,
}

export interface IGetProjectByIdReq extends Request<{ id: IProject["id"] }> {}
export interface IGetProjectByProjectIdReq
  extends Request<{ projectId: IProject["projectId"] }> {}
  export interface IGetProjectByGroupIdReq
  extends Request<{ projectGroupId: IProject["projectGroupId"] }> {}
export interface IGetProjectByStatusReq
  extends Request<{ projectStatus: IProject["projectStatus"] }> {}
export interface IGetProjectByOwnerReq
  extends Request<{ projectOwnerId: IProject["projectOwnerId"] }> {}
export interface IGetProjectByApplicantReq
  extends Request<{ projectApplicantId: IProject["projectApplicantId"] }> {}
export interface IGetProjectByUserReq
  extends Request<{ id: number }> {}
export interface IGetProjectByParticipantReq
  extends Request<{ projectParticipantId: IProject["projectOwnerId"] }> {}
export interface IAddProjectReq extends Request {}
export interface IUpdateProjectReq
  extends Request<{ id: IProject["id"] }, any> {}
export interface IDeleteProjectReq extends Request<{ id: IProject["id"] }> {}
